// @ts-ignore
import { UserInfo } from '@/types/user';
import type { RequestOptions } from '@@/plugin-request/request';
// @ts-ignore
import type { RequestConfig } from '@umijs/max';
import { message, Modal } from 'antd';
import { history } from 'umi';
import configs from '../../config/env';
// import { ExclamationCircleOutlined } from '@ant-design/icons';
const { confirm } = Modal;

// 与后端约定的响应数据格式
interface ResponseStructure {
  code: number;
  msg: string;
  data?: any;
  rows?: any[];
  total?: number
}

/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
export const errorConfig: RequestConfig = {
  // 错误处理： umi@3 的错误处理方案。
  errorConfig: {
    // 错误抛出
    adaptor: () => {
      return {
        showType: 0,
      };
    },
    // 错误接收及处理
    // errorHandler: (error: any, opts: any) => {
    //   console.log(error
    //   );

    //   if (opts?.skipErrorHandler) throw error;
    //   // 我们的 errorThrower 抛出的错误。
    //   if (error.response) {
    //     // Axios 的错误
    //     // 请求成功发出且服务器也响应了状态码，但状态代码超出了 2xx 的范围
    //     // message.error(`Response status:${error.response.status}`);
    //     if (error.data.status === 500) {
    //       console.log('error500');

    //     } else if (error.data.status === 401) {
    //       console.log('error401');
    //     } else {
    //       console.log('error');
    //     }
    //   } else if (error.request) {
    //     // 请求已经成功发起，但没有收到响应
    //     // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例，
    //     // 而在node.js中是 http.ClientRequest 的实例
    //     message.error('None response! Please retry.');
    //   } else {
    //     // 发送请求时出了点问题
    //     message.error('Request error, please retry.');
    //   }
    // },
  },

  // 请求拦截器
  requestInterceptors: [
    (url: string, options: RequestOptions) => {
      // 拦截请求配置，进行个性化处理。
      // console.log(url, options);
      url = configs[process.env.API_ENV as any].API_SERVER + url;
      const headers = {}
      if (localStorage.getItem('token')) {
        headers['Authorization'] = localStorage.getItem('token')
      }
      return { url, options: { ...options, headers } }
    },
  ],

  // 响应拦截器
  responseInterceptors: [
    async (response: any) => {
      // 拦截响应数据，进行个性化处理
      const data = await response.clone().json();
      if (data?.code !== 200) {
        if (data?.code === 401) {
          localStorage.removeItem('token')
          // 在个人中心或者在表单页失去token
          if (history.location.pathname.includes('/user-center') || history.location.pathname.includes('/hold') || history.location.pathname.includes('/msg-detail')) {
            history.replace('/login');
          }
          // 测试环境使用start---------------------------------
          // message.warning('登录超时或者未登陆，请登录');
          // return response
          // 测试环境使用end-----------------------------


          // 线上环境使用 start -------------------
          throw new Error('登录超时或者未登陆，请登录');
          // 线上环境使用 end -------------------

        }
        // 测试环境使用start---------------------------------
        // message.warning(data?.msg);
        // return response
        // 测试环境使用end-----------------------------


        // 线上环境使用 start -------------------
        throw new Error(data?.msg);
        // 线上环境使用 end -------------------

      }
      return response;
    },
  ],
};